home *** CD-ROM | disk | FTP | other *** search
- #include "DeskLib:Icon.h"
- #include "DeskLib:Event.h"
- #include "DeskLib:Sound.h"
- #include "DeskLib:WimpSWIs.h"
- #include "DeskLib:Menu.h"
- #include "DeskLib:Window.h"
-
- #include "Shell.BarIcon.h"
- #include "Shell.Shell.h"
- #include "Shell.SafeAlloc.h"
-
- #define menu_INFO 0
- #define menu_PAUSE 1
- #define menu_CONTINUE 2
- #define menu_SPEED 3
- #define menu_QUIT 4
-
-
- static BOOL Shell_IconbarMenuHandler( event_pollblock *event, void *reference);
- static BOOL Shell_IconbarMenuCancelHandler( event_pollblock *event, void *reference);
-
-
- static void ClaimHandlers( void *reference)
- {
- Event_Claim( event_MENU, event_ANY, event_ANY, Shell_IconbarMenuHandler, reference);
- Event_Claim( event_USERMESSAGE, event_ANY, event_ANY, Shell_IconbarMenuCancelHandler, reference);
- }
-
- static void ReleaseHandlers( void *reference)
- {
- Event_Release( event_MENU, event_ANY, event_ANY, Shell_IconbarMenuHandler, reference);
- Event_Release( event_USERMESSAGE, event_ANY, event_ANY, Shell_IconbarMenuCancelHandler, reference);
- }
-
-
- #define Menu_FirstEntry(menu) ((menu_item *) (((menu_ptr) (menu) + 1)))
-
-
- static BOOL Shell_IconbarMenuHandler( event_pollblock *event, void *reference)
- { menu_ptr m = (menu_ptr) reference;
- mouse_block mouse;
-
- Wimp_GetPointerInfo( &mouse);
-
- if ( event->data.selection[0] == menu_INFO) ; /* Chosen 'Info'. */
-
- if ( event->data.selection[0] == menu_PAUSE) {
- Shell_paused = TRUE;
- Menu_SetFlags( m, menu_PAUSE, TRUE, TRUE);
- Menu_SetFlags( m, menu_CONTINUE, FALSE, FALSE);
- }
-
- if ( event->data.selection[0] == menu_CONTINUE) {
- Shell_paused = FALSE;
- Menu_SetFlags( m, menu_PAUSE, FALSE, FALSE);
- Menu_SetFlags( m, menu_CONTINUE, TRUE, TRUE);
- }
-
- if ( event->data.selection[0] == menu_SPEED && event->data.selection[1]==0) {
- double newspeed;
- menu_block *submenu= Menu_FirstEntry(m)[ menu_SPEED].submenu.menu;
- char *text = Menu_FirstEntry(submenu)[ 0].icondata.indirecttext.buffer;
- sscanf( text, "%lf", &newspeed);
- Shell_SetPollInterval( newspeed);
- }
-
- if ( event->data.selection[0] == menu_QUIT) Event_CloseDown();
-
-
- if ( mouse.button.data.adjust) {
- mouse.pos.x = mouse.pos.y = 0;
- Menu_ShowLast(); /*( m, mouse.pos, |*iconbar*| FALSE);*/
- }
-
- else ReleaseHandlers( reference);
-
-
- return TRUE;
- }
-
-
-
-
-
- static BOOL Shell_IconbarMenuCancelHandler( event_pollblock *event, void *reference)
- {
- if ( event->data.message.header.action == message_MENUSDELETED) ReleaseHandlers( reference);
- return FALSE;
- }
-
-
-
- static BOOL Shell_IconbarMenuClickHandler( event_pollblock *event, void *reference)
- { menu_ptr m = (menu_ptr) reference;
- if ( !event->data.mouse.button.data.menu) return FALSE; /* Not Menu button. */
-
- Menu_Show( m, event->data.mouse.pos.x, -1);
-
- ClaimHandlers( reference);
- return TRUE;
- }
-
-
-
- icon_handle Shell_AddBarIcon( char *spritename)
- { icon_handle icon;
- menu_ptr m;
- window_handle infobox;
-
-
- icon = Icon_BarIcon( spritename, iconbar_RIGHT);
-
- m = Menu_New( "Shell", "Info|Pause,Continue|Speed|Quit");
-
- infobox = Window_Create( "ProgInfo", 0);
- if ( infobox) Menu_AddSubMenu( m, menu_INFO, (menu_ptr) infobox);
- else Menu_SetFlags( m, menu_INFO, FALSE, TRUE);
-
- /*
- speedbox = Window_Create( "ShellSpeed", 0);
- if ( speedbox) Menus_AddDialogBox( m, menu_SPEED+1, speedbox);
- else Menus_FadeEntry( m, menu_SPEED+1, TRUE);
- */
-
- { menu_ptr subm;
- subm = Menu_New( "Poll (s)", "0.1");
- Menu_MakeWritable( subm, 0, Shell_SafeCalloc( 1, 8), 8, "");
- Menu_AddSubMenu( m, menu_SPEED, subm);
- }
-
-
- Menu_SetFlags( m, menu_PAUSE, FALSE, FALSE);
- Menu_SetFlags( m, menu_CONTINUE, TRUE, TRUE);
-
-
- Event_Claim( event_CLICK, window_ICONBAR, icon, Shell_IconbarMenuClickHandler, (void *) m);
-
- return icon;
- }
-
-